home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 6 / QRZ Ham Radio Callsign Database - Volume 6.iso / mac / files / amiga / csrc720j.lzh / seek.c < prev    next >
C/C++ Source or Header  |  1993-01-10  |  1KB  |  65 lines

  1. /* seek.c */
  2.  
  3. #include <stdio.h>
  4. #include <time.h>
  5. #include <fcntl.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. /* DO NOT include amiga.h in here ... it redefines fseek and lseek
  9.    and would make the myfseek and mylseek routines infinitely recursive
  10.    which is not quite what is wanted
  11. #include "amiga.h"
  12. */
  13. /* Two workarounds for the fseek and lseek functions which do not
  14.    seek past the end of file
  15.    amiga.h contains macro redefinitions of lseek and fseek
  16. */
  17. myfseek(str,offs,org)
  18. FILE *str;
  19. long offs;
  20. int org;
  21. {
  22.    char astr[128];
  23.    int ret;
  24.    long k;
  25.  
  26.    if(fseek(str,offs,org) == -1) {
  27.       k = fseek(str,0L,2);
  28.       k = offs - k;
  29.       while(k > 0){
  30.          if(k >= 128) {
  31.             fwrite(astr,128,1,str);
  32.             k -= 128;
  33.          }
  34.          else {
  35.             fwrite(astr,k,1,str);
  36.             k = 0;
  37.          }
  38.       }
  39.    }
  40. }
  41. mylseek(fid,offs,org)
  42. int fid;
  43. long offs;
  44. int org;
  45. {
  46.    char astr[128];
  47.  
  48.    long k,j;
  49.    if(lseek(fid,offs,org) == -1L) {
  50.       k = lseek(fid,0L,2);
  51.       k = offs - k;
  52.       while(k > 0){
  53.          if(k >= 128) {
  54.             write(fid,astr,128);
  55.             k -= 128;
  56.          }
  57.          else {
  58.             write(fid,astr,k);
  59.             k = 0;
  60.          }
  61.       }
  62.    }
  63.    return(offs);
  64. }
  65.